Заметил (к счастью, до релиза в продакшн), что из очереди RabbitMQ пропадают сообщения, начисто, если убить контейнер и создать его снова. Почему -- непонятно: очередь durable, сообщения persistent. В конфиге docker-compose всё прописано как надо, очередь живёт на внешнем томе:
volumes:
- queues:/var/lib/rabbitmq/mnesia
Загадка...
Оказалось, что имя базы mnesia зависит от имени хоста, на котором крутится RabbitMQ. Как только я пересоздаю контейнер, имя хоста меняется, Rabbit ищет базу, не находит, создаёт новую. Вот так всё просто... Одно из решений -- задать RabbitMQ перманентное имя хоста, например, через переменную окружения в том же docker-compose.yaml (rabbit
-- это название контейнера):
environment:
- RABBITMQ_NODENAME=project_queue@rabbit